import request from "@/utils/request";

const CHART_BASE_URL = "/api";

/**
 * 图表数据API
 */
export const ChartAPI = {
  /**
   * 获取谐波数据
   * @param cpu CPU编号
   */
  fetchHarmonicData: (cpu: number) => {
    return request<any, HarmonicDataItem[]>({
      url: `${CHART_BASE_URL}/hgraph/${cpu}`,
      method: "get",
    });
  },

  /**
   * 获取矢量数据
   * @param cpu CPU编号
   */
  fetchVectorData: (cpu: number) => {
    return request<any, VectorDataItem[]>({
      url: `${CHART_BASE_URL}/vplot/${cpu}`,
      method: "get",
    });
  },

  /**
   * 获取波形数据
   * @param cpu CPU编号
   */
  fetchWaveData: (cpu: number) => {
    return request<any, WaveDataItem[]>({
      url: `${CHART_BASE_URL}/wplot/${cpu}`,
      method: "get",
    });
  },
};

// ==================== 数据结构定义 ====================

/**
 * 谐波数据项
 */
export interface HarmonicDataItem {
  /** 唯一标识 */
  ID: number;
  /** 分组 */
  Group: number;
  /** 名称 */
  Name: string;
  /** 柱状图数据 */
  Bar: HarmonicBarItem[];
}

/**
 * 谐波柱状图数据项
 */
export interface HarmonicBarItem {
  /** 柱状图名称 */
  BarName: string;
  /** 柱状图别名 */
  BarAlias: string;
  /** 单位 */
  BarDim: string;
  /** 当前值 */
  Value: number;
  /** 最大值 */
  MaxValue: number;
}

/**
 * 矢量数据项
 */
export interface VectorDataItem {
  /** 唯一标识 */
  ID: number;
  /** 分组 */
  Group: number;
  /** 名称 */
  Name: string;
  /** 别名 */
  Alias: string;
  /** 幅值 */
  Measure: number;
  /** 角度 */
  Angle: number;
}

/**
 * 波形数据项
 */
export interface WaveDataItem {
  /** 唯一标识 */
  ID: number;
  /** 分组 */
  Group: number;
  /** 名称 */
  Name: string;
  /** 数据点数量 */
  DataNums: number;
  /** 波形数据 */
  Data: number[];
}

/**
 * 图表类型枚举
 */
export enum ChartType {
  /** 谐波图 */
  HARMONIC = "harmonic",
  /** 矢量图 */
  VECTOR = "vector",
  /** 波形图 */
  WAVE = "wave",
}

/**
 * 图表基础信息
 */
export interface ChartBaseInfo {
  /** 唯一标识 */
  ID: number;
  /** 分组 */
  Group: number;
  /** 名称 */
  Name: string;
}

/**
 * 图表数据联合类型
 */
export type ChartDataItem = HarmonicDataItem | VectorDataItem | WaveDataItem;

export default ChartAPI;
